common.skill

H2 এর ট্রানজাকশন ম্যানেজমেন্ট

Database Tutorials - এইচ২ ডাটাবেস (H2 Database)
203
203

H2 Database একটি রিলেশনাল ডেটাবেজ ম্যানেজমেন্ট সিস্টেম (RDBMS) যা ACID (Atomicity, Consistency, Isolation, Durability) প্রপার্টিজ সমর্থন করে, যার মাধ্যমে ট্রানজাকশন ম্যানেজমেন্ট অত্যন্ত নির্ভরযোগ্য এবং কার্যকরী হয়। ট্রানজাকশন ব্যবস্থাপনা নিশ্চিত করে যে ডেটাবেজের সমস্ত অপারেশন একে অপরের ওপর নির্ভরশীল না হয়ে স্বাধীনভাবে কাজ করতে পারে, তবে শেষে তাদের সব কিছু একত্রিত বা বাতিল হয়ে যেতে পারে।


ACID Properties (Atomicity, Consistency, Isolation, Durability)

১. Atomicity (পারমাণবিকতা)

একটি ট্রানজাকশন সম্পূর্ণরূপে সফল না হলে, তার সমস্ত অপারেশন রোলব্যাক করা হয়, অর্থাৎ, ডেটাবেজে কোনো পরিবর্তনই কার্যকর হয় না। একে "অপারেশনগুলির একক একক সত্ত্বা" বলা হয়।
উদাহরণ:
যদি দুটি স্টেপে একটি ট্রানজাকশন ঘটে (যেমন, ডেটা ইনসার্ট এবং তারপর ডেটা আপডেট), কিন্তু আপডেট স্টেপে কোনো ত্রুটি ঘটে, তবে ইনসার্ট অপারেশনটি বাতিল হয়ে যাবে।

২. Consistency (সঙ্গতি)

একটি ট্রানজাকশন শুরু হওয়ার আগে এবং শেষ হওয়ার পরে ডেটাবেজের অবস্থা সঠিক থাকতে হবে। অর্থাৎ, ডেটাবেজে কোনো ত্রুটি বা অসঙ্গতি থাকা উচিত নয়।
উদাহরণ:
যদি কোনো ট্রানজাকশন পুরোপুরি সফল হয়, তবে এটি ডেটাবেজের অন্তর্নিহিত নিয়ম এবং কনস্ট্রেইন্টে কোনো সমস্যা সৃষ্টি না করে।

৩. Isolation (পৃথকীকরণ)

একটি ট্রানজাকশন চলাকালে অন্য ট্রানজাকশনগুলি তার কার্যক্রমের সাথে হস্তক্ষেপ করতে পারে না। প্রত্যেক ট্রানজাকশন পৃথকভাবে কাজ করবে, যেন কোনো আরেকটি ট্রানজাকশন চলতে না থাকলে সেই ট্রানজাকশনের প্রভাব আরেকটির ওপর না পড়ে।
উদাহরণ:
যদি দুটি ট্রানজাকশন একই রেকর্ডে পরিবর্তন করতে চেষ্টা করে, তবে ট্রানজাকশনগুলো একে অপরকে ব্লক করবে অথবা তাদের মধ্যে একটিকে প্রত্যাখ্যান করবে।

৪. Durability (স্থায়িত্ব)

ট্রানজাকশন সফলভাবে শেষ হওয়ার পর, তার পরিবর্তনগুলি ডেটাবেজে স্থায়ীভাবে সংরক্ষিত হয়, এমনকি সিস্টেম ক্র্যাশ হলেও।
উদাহরণ:
আপনি একটি COMMIT করতে পরে সিস্টেম ক্র্যাশ হলে, ট্রানজাকশন যে পরিবর্তন করেছে তা স্থায়ীভাবে সংরক্ষিত থাকবে।


H2 Database-এ ট্রানজাকশন ম্যানেজমেন্ট

H2 ডেটাবেজে ট্রানজাকশন পরিচালনা করার জন্য নিম্নলিখিত SQL কমান্ডগুলো ব্যবহার করা হয়:

১. BEGIN TRANSACTION (ট্রানজাকশন শুরু করা)

এটি ট্রানজাকশন শুরু করার জন্য ব্যবহৃত হয়। H2 ডেটাবেজে ট্রানজাকশন স্বয়ংক্রিয়ভাবে শুরু হয় যখন আপনি কোনো INSERT, UPDATE, বা DELETE অপারেশন চালান, তবে আপনি যদি ইচ্ছাকৃতভাবে ট্রানজাকশন শুরু করতে চান, তবে আপনি BEGIN TRANSACTION ব্যবহার করতে পারেন।

BEGIN TRANSACTION;

২. COMMIT (ট্রানজাকশন চূড়ান্ত করা)

যখন আপনি ট্রানজাকশনের সমস্ত কার্যক্রম সফলভাবে সম্পন্ন করেন, তখন COMMIT ব্যবহার করে ডেটাবেজে সমস্ত পরিবর্তন সেভ করা হয়।

COMMIT;

৩. ROLLBACK (ট্রানজাকশন বাতিল করা)

যদি কোনো কারণে ট্রানজাকশনের কোনো অপারেশন সফল না হয় বা আপনি পরিবর্তন বাতিল করতে চান, তবে ROLLBACK ব্যবহার করে পূর্ববর্তী অবস্থায় ফিরে যাওয়া হয়।

ROLLBACK;

৪. SAVEPOINT (সংরক্ষণ পয়েন্ট তৈরি করা)

আপনি যখন বড় ধরনের ট্রানজাকশন পরিচালনা করেন, তখন নির্দিষ্ট বিন্দুতে পরিবর্তন সংরক্ষণ করার জন্য SAVEPOINT ব্যবহার করতে পারেন। এটি ট্রানজাকশনের একটি আংশিক অবস্থান সেভ করে, যাতে পরবর্তীতে যদি আপনি চান, তবে শুধুমাত্র সেই অংশটি রোলব্যাক করতে পারেন, পুরো ট্রানজাকশন নয়।

SAVEPOINT savepoint_name;

এবং এই সংরক্ষণ পয়েন্টে ফিরে যেতে:

ROLLBACK TO SAVEPOINT savepoint_name;

৫. TRANSACTION ISOLATION LEVEL (পৃথকীকরণ স্তর)

ট্রানজাকশন পৃথকীকরণের স্তর নিয়ন্ত্রণ করার জন্য SET TRANSACTION ISOLATION LEVEL ব্যবহার করা হয়। H2 ডেটাবেজে চারটি পৃথকীকরণ স্তর রয়েছে:

  • READ UNCOMMITTED: সর্বনিম্ন স্তর, যার মধ্যে অস্থির ডেটাও দেখা যায়।
  • READ COMMITTED: শুধুমাত্র দৃঢ়ভাবে কমিট করা ডেটা দেখতে পাওয়া যায়।
  • REPEATABLE READ: একই ডেটা বারবার পড়া যাবে, কিন্তু ডেটা পরিবর্তিত হতে পারবে না।
  • SERIALIZABLE: সর্বোচ্চ স্তর, যেখানে ট্রানজাকশন সম্পূর্ণভাবে পৃথক করা হয়।
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

৬. AUTO-COMMIT মোড

H2 ডেটাবেজ ডিফল্টভাবে auto-commit মোডে কাজ করে, যেখানে প্রতিটি SQL স্টেটমেন্টের পর স্বয়ংক্রিয়ভাবে COMMIT করা হয়। আপনি যদি চান ট্রানজাকশন ম্যানুয়ালি পরিচালনা করতে, তবে auto-commit বন্ধ করতে পারেন:

SET AUTOCOMMIT FALSE;

H2 ট্রানজাকশন ম্যানেজমেন্টের উদাহরণ

অ্যাকাউন্ট ট্রান্সফার উদাহরণ:

ধরা যাক, একজন ব্যবহারকারীর অ্যাকাউন্ট থেকে আরেকটি অ্যাকাউন্টে টাকা ট্রান্সফার করতে চান। ট্রানজাকশন ব্যবহারের মাধ্যমে আমরা নিশ্চিত করতে পারি যে, যদি কোনো ত্রুটি ঘটে, তাহলে টাকা অপসারণ এবং জমা দুটি একই সময়ে হবে না।

BEGIN TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;  -- টাকা কাটা
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;  -- টাকা জমা

-- যদি কোনো ত্রুটি না ঘটে, তাহলে ট্রানজাকশন চূড়ান্ত করা হবে
COMMIT;

এখানে, যদি কোনো একটি UPDATE অপারেশন ব্যর্থ হয়, তাহলে ROLLBACK ব্যবহার করে সমস্ত পরিবর্তন বাতিল করা যাবে।


উপসংহার

H2 ডেটাবেজে ট্রানজাকশন ম্যানেজমেন্ট অত্যন্ত শক্তিশালী এবং ACID প্রপার্টিজের মাধ্যমে এটি ডেটাবেজের অ্যাক্সেস এবং ব্যবস্থাপনাকে সুরক্ষিত রাখে। BEGIN TRANSACTION, COMMIT, ROLLBACK এবং SAVEPOINT ব্যবহার করে আপনি সহজেই ট্রানজাকশন পরিচালনা করতে পারবেন। H2-তে ট্রানজাকশন ম্যানেজমেন্ট নিশ্চিত করে যে ডেটাবেজের কোনো পরিবর্তন ত্রুটিপূর্ণ বা অসম্পূর্ণ না হয়।

common.content_added_by

ACID Properties

239
239

ACID হলো একটি সেট যা Atomicity, Consistency, Isolation, এবং Durability এই চারটি বৈশিষ্ট্য নিয়ে গঠিত। এই গুণাবলীর মাধ্যমে ডেটাবেজ সিস্টেমের ট্রানজেকশনগুলি নিরাপদ, নির্ভরযোগ্য এবং কার্যকরী হয়। ডেটাবেজে যেকোনো রিড/রাইট অপারেশন বা ট্রানজেকশন সম্পাদন করার সময় ACID বৈশিষ্ট্যগুলো নিশ্চিত করা প্রয়োজন।


1. Atomicity (পারমাণবিকতা)

Atomicity এর মানে হলো একটি ট্রানজেকশন সম্পূর্ণভাবে সফল বা সম্পূর্ণভাবে ব্যর্থ হতে হবে, এর মাঝে কোনো অসম্পূর্ণ অবস্থার অস্তিত্ব থাকতে পারে না। এটি একটি "অথবা সবকিছু, অথবা কিছুই না" শর্ত। যদি ট্রানজেকশনটির মধ্যে কোনো ধাপ ব্যর্থ হয়, তাহলে সিস্টেমে কোনো পরিবর্তন করা হবে না এবং ডেটাবেজ আগের অবস্থায় ফিরে যাবে।

উদাহরণ:

ধরা যাক, আপনি একটি ব্যাংক অ্যাকাউন্টে টাকা ট্রান্সফার করছেন:

  • অ্যাকাউন্ট A থেকে টাকা কমানোর অপারেশন
  • অ্যাকাউন্ট B-তে টাকা যোগ করার অপারেশন

যদি কোনো কারণে অ্যাকাউন্ট B তে টাকা যোগ করার অপারেশন ব্যর্থ হয়, তবে অ্যাকাউন্ট A থেকে টাকা কমানোর অপারেশনও বাতিল হয়ে যাবে, এবং ট্রানজেকশনটি শুরু হওয়ার আগের অবস্থায় ফিরে যাবে।


2. Consistency (সামঞ্জস্য)

Consistency নিশ্চিত করে যে, ট্রানজেকশন সফলভাবে সম্পন্ন হলে ডেটাবেজ তার পূর্বের নির্ধারিত অবস্থার মধ্যে থাকবে। অর্থাৎ, ট্রানজেকশন শুরু হওয়ার আগে এবং পরে ডেটাবেজের অখণ্ডতা রক্ষা করা হয়। কোনো ট্রানজেকশন ডেটাবেজের অখণ্ডতাকে ক্ষতিগ্রস্ত করতে পারবে না।

উদাহরণ:

ধরা যাক, একটি অ্যাকাউন্টে মাত্র ১০০০ টাকা থাকতে পারে (ম্যাক্সিমাম ব্যালেন্স)। যদি কেউ ১৫০০ টাকা ট্রান্সফার করার চেষ্টা করে, তাহলে Consistency বিধান অনুসারে, ট্রানজেকশনটি ব্যর্থ হবে এবং অ্যাকাউন্টে ১৫০০ টাকা না যোগ হয়ে ১০০০ টাকাই থাকবে।


3. Isolation (অগ্নিবিয়োজন)

Isolation নিশ্চিত করে যে, একাধিক ট্রানজেকশন একে অপরের থেকে বিচ্ছিন্নভাবে কাজ করে, অর্থাৎ এক ট্রানজেকশন অন্য ট্রানজেকশনগুলোর সাথে একে অপরকে প্রভাবিত করতে পারে না। একে অপরের কাজের মধ্যবর্তী কোনো পরিবর্তন দেখা যাবে না যতক্ষণ না একটি ট্রানজেকশন সম্পন্ন হয়।

Isolation এর বিভিন্ন স্তর (Isolation Levels):

  • Read Uncommitted: এক ট্রানজেকশন অন্য ট্রানজেকশন দ্বারা পরিবর্তিত ডেটা পড়তে পারে, যার ফলে 'dirty reads' হতে পারে।
  • Read Committed: শুধুমাত্র শেষ হওয়া, কমিট করা ডেটা পড়া যাবে।
  • Repeatable Read: একই ট্রানজেকশন বারবার একে অপরকে একই ডেটা পড়বে।
  • Serializable: একে অপরের মধ্যে কোনো প্যারালাল অ্যাক্সেস সম্ভব নয়, ফলে একে একে ট্রানজেকশনগুলো সম্পন্ন হবে।

উদাহরণ:

ধরা যাক, একটি ট্রানজেকশন অ্যাকাউন্ট A থেকে টাকা সরাচ্ছে, এবং অন্য একটি ট্রানজেকশন অ্যাকাউন্ট B তে টাকা যোগ করছে। Isolation নিশ্চিত করবে যে, দুটি ট্রানজেকশন একই সময়ে একে অপরের মধ্যে কোনরকম অসঙ্গতি সৃষ্টি করতে পারবে না।


4. Durability (স্থায়ীত্ব)

Durability নিশ্চিত করে যে, একটি ট্রানজেকশন সফলভাবে সম্পন্ন হওয়ার পর, তার সমস্ত পরিবর্তন স্থায়ী হবে এবং কোনো কারণে সিস্টেম বন্ধ হয়ে গেলেও সেই পরিবর্তনগুলি হারানো যাবে না। অর্থাৎ, ট্রানজেকশন সম্পন্ন হলে তার পরিবর্তন ডেটাবেজে স্থায়ীভাবে সংরক্ষিত থাকবে।

উদাহরণ:

যদি একটি ব্যাংক ট্রানজেকশন সম্পন্ন হওয়ার পর পাওয়া অর্থ অ্যাকাউন্টে জমা হয়ে যায় এবং এর পর সিস্টেমে বিদ্যুৎ বিপর্যয় ঘটে, তবে Durability গুণাবলী নিশ্চিত করবে যে, সেই টাকা হারিয়ে যাবে না এবং পরবর্তী সময়ে তা অ্যাকাউন্টে উপলব্ধ থাকবে।


ACID Properties এর গুরুত্ব

  • ডেটার নিরাপত্তা: ACID প্রপার্টিগুলি ডেটার নিরাপত্তা নিশ্চিত করে, যাতে কোনো ডেটা ক্ষতিগ্রস্ত বা হারানো না হয়।
  • বিশ্বস্ততা: এটি ডেটাবেজ সিস্টেমের বিশ্বস্ততা ও নির্ভরযোগ্যতা বজায় রাখে, যাতে ব্যবহারকারীরা তাদের তথ্যের উপর ভরসা করতে পারে।
  • মাল্টিপল ইউজার ট্রানজেকশন: ACID ট্রানজেকশনগুলো মাল্টিপল ইউজারের ক্ষেত্রে কোন সমস্যা সৃষ্টি না করে একসাথে কার্যকরী হতে সাহায্য করে।

এটি ছিল ACID Properties এর বিস্তারিত আলোচনা, যা ডেটাবেজ সিস্টেমের মৌলিক গুণাবলী এবং ট্রানজেকশন ম্যানেজমেন্টের গুরুত্বপূর্ণ অংশ। ACID এর মাধ্যমে নিশ্চিত করা হয় যে, ডেটাবেজ সিস্টেমের ট্রানজেকশনগুলো সঠিক, নির্ভরযোগ্য এবং নিরাপদ।

common.content_added_by

Commit এবং Rollback

274
274

H2 Database-এ Commit এবং Rollback দুটি গুরুত্বপূর্ণ ট্রানজেকশন ম্যানেজমেন্ট অপারেশন। এগুলি ডেটাবেজের ডেটা পরিবর্তনের প্রক্রিয়া নিয়ন্ত্রণ করে এবং ডেটাবেজে সঠিকতা এবং অখণ্ডতা (consistency) বজায় রাখে। নিচে এই দুটি অপারেশন এবং তাদের ব্যবহার বিস্তারিতভাবে আলোচনা করা হলো।


Commit

Commit হল একটি SQL ট্রানজেকশন অপারেশন যা ডেটাবেজে করা পরিবর্তনগুলি স্থায়ী (persistent) করে তোলে। যখন একটি ট্রানজেকশনের মধ্যে একাধিক অপারেশন (যেমন INSERT, UPDATE, DELETE) করা হয়, তখন Commit এই পরিবর্তনগুলিকে ডেটাবেজে সেভ করে দেয়।

Commit কিভাবে কাজ করে:

  • যখন আপনি Commit করেন, তখন ট্রানজেকশনের মধ্যে করা সমস্ত পরিবর্তন চূড়ান্ত হয়ে যায় এবং সেগুলি স্থায়ীভাবে ডেটাবেজে সংরক্ষিত হয়।
  • একবার Commit করার পরে, ট্রানজেকশন শেষ হয়ে যায় এবং কোনও পরিবর্তন আর বাতিল (rollback) করা সম্ভব নয়।

Commit উদাহরণ:

BEGIN;

INSERT INTO employees (id, name, position, salary) VALUES (1, 'Alice', 'Engineer', 50000);
UPDATE employees SET salary = 60000 WHERE id = 1;

COMMIT;

এখানে:

  • BEGIN দ্বারা ট্রানজেকশন শুরু হয়েছে।
  • কিছু পরিবর্তন করা হয়েছে (INSERT এবং UPDATE অপারেশন)।
  • COMMIT অপারেশন দ্বারা এই পরিবর্তনগুলি ডেটাবেজে স্থায়ী হয়ে গেছে।

Commit এর সুবিধা:

  • ডেটার অখণ্ডতা রক্ষা: একাধিক অপারেশনের পরিবর্তন একসাথে সেভ হয়, ফলে ডেটাবেজের তথ্যের মধ্যে অখণ্ডতা (consistency) বজায় থাকে।
  • কনকারেন্সি: একাধিক ব্যবহারকারী যখন ডেটাবেজে কাজ করছেন, তখন একে অপরের পরিবর্তনগুলির সঙ্গে সংঘর্ষ (conflict) কম হয়।

Rollback

Rollback হল একটি SQL ট্রানজেকশন অপারেশন যা ট্রানজেকশনের মধ্যে করা সমস্ত পরিবর্তন পূর্বাবস্থায় ফিরিয়ে আনে। যদি আপনি একটি ট্রানজেকশন চলাকালে কোনও ভুল বা সমস্যা দেখতে পান, তবে Rollback ব্যবহার করে আপনি সমস্ত পরিবর্তন বাতিল করতে পারেন এবং ডেটাবেজকে পূর্বের অবস্থায় ফিরিয়ে আনতে পারেন।

Rollback কিভাবে কাজ করে:

  • যখন Rollback করা হয়, তখন ট্রানজেকশনের মধ্যে করা সমস্ত পরিবর্তন ফিরিয়ে আনা হয় এবং ডেটাবেজ পূর্বের অবস্থায় ফিরে আসে।
  • এটি তখনই ব্যবহার করা হয় যখন আপনি নিশ্চিত হন যে আপনি করা পরিবর্তনগুলো স্থায়ী করতে চান না।

Rollback উদাহরণ:

BEGIN;

INSERT INTO employees (id, name, position, salary) VALUES (2, 'Bob', 'Manager', 70000);
UPDATE employees SET salary = 65000 WHERE id = 2;

-- যদি কিছু ভুল হয়, Rollback করা হবে
ROLLBACK;

এখানে:

  • BEGIN দ্বারা ট্রানজেকশন শুরু হয়েছে।
  • কিছু পরিবর্তন করা হয়েছে (INSERT এবং UPDATE অপারেশন)।
  • ROLLBACK দ্বারা করা সমস্ত পরিবর্তন বাতিল হয়ে যাবে এবং ডেটাবেজ পূর্বের অবস্থায় ফিরে যাবে।

Rollback এর সুবিধা:

  • ত্রুটি মোকাবিলা: যখন কোনও ভুল হয়, তখন আপনি Rollback করে ডেটাবেজের পূর্বের অবস্থায় ফিরে যেতে পারেন, ফলে ডেটা সুরক্ষিত থাকে।
  • ডেটাবেজে স্থায়ী পরিবর্তন এড়ানো: কোনও অপারেশন ভুল হলে তা বাতিল করার মাধ্যমে অপ্রয়োজনীয় বা ক্ষতিকর পরিবর্তন আটকানো যায়।

Commit এবং Rollback এর মধ্যে পার্থক্য

বৈশিষ্ট্যCommitRollback
ফাংশনপরিবর্তনগুলিকে ডেটাবেজে স্থায়ী করে তোলেকরা পরিবর্তনগুলো বাতিল করে পূর্বের অবস্থায় ফিরে আসে
ব্যবহারযখন আপনি নিশ্চিত হন যে সব কিছু সঠিকভাবে সম্পন্ন হয়েছেযখন একটি ভুল বা সমস্যা ঘটে এবং পরিবর্তনগুলো বাতিল করতে হয়
পরিণতিপরিবর্তন স্থায়ী হয় এবং আর বাতিল করা যায় নাপরিবর্তনগুলি বাতিল হয়ে যায়, এবং ডেটাবেজ পূর্বের অবস্থায় ফিরে আসে
কখন ব্যবহার করবেনডেটাবেজে করা পরিবর্তনগুলো নিশ্চিতভাবে সেভ করতেভুল সংশোধন করতে বা পরীক্ষার সময়ে ডেটাবেজে কোনো পরিবর্তন করতে না চাওয়া

অ্যাডভান্সড ট্রানজেকশন ম্যানেজমেন্ট: Isolation Levels

H2 ডেটাবেজে ট্রানজেকশনের Isolation Levels ব্যবহার করা যায়, যা ট্রানজেকশনের কার্যকলাপের মধ্যে বিভিন্ন রকমের concurrency control পরিচালনা করে। নিম্নলিখিত Isolation Levels সমর্থিত:

  1. READ UNCOMMITTED: এক ট্রানজেকশনের অসম্পূর্ণ (uncommitted) পরিবর্তন অন্য ট্রানজেকশনে পড়া যেতে পারে।
  2. READ COMMITTED: শুধুমাত্র কমিট হওয়া পরিবর্তনগুলি পড়া যাবে।
  3. REPEATABLE READ: একই ট্রানজেকশনের মধ্যে একই ডেটা একাধিকবার পড়লে তা অপরিবর্তিত থাকবে।
  4. SERIALIZABLE: ট্রানজেকশনের মধ্যে সম্পূর্ণ isolation তৈরি করে, যাতে কোনো দুই ট্রানজেকশন একে অপরের ডেটা পড়তে বা পরিবর্তন করতে না পারে।

সারাংশ

  • Commit: একটি ট্রানজেকশনের মধ্যে করা পরিবর্তনগুলো স্থায়ী করে এবং ডেটাবেজে সেভ করে।
  • Rollback: একটি ট্রানজেকশনের মধ্যে করা সমস্ত পরিবর্তন বাতিল করে এবং ডেটাবেজকে পূর্বের অবস্থায় ফিরিয়ে আনে।

H2 ডেটাবেজে ট্রানজেকশন ম্যানেজমেন্টের মাধ্যমে আপনি নিশ্চিত করতে পারেন যে আপনার ডেটাবেজের ডেটা সঠিক, স্থায়ী এবং সুরক্ষিত থাকে। Commit এবং Rollback হল ডেটাবেজে সর্বোচ্চ অখণ্ডতা এবং নিয়ন্ত্রণ বজায় রাখার জন্য অপরিহার্য টুল।

common.content_added_by

Transaction Isolation Levels

196
196

ট্রানজেকশন আইসোলেশন লেভেল (Transaction Isolation Levels) হল একটি ডেটাবেজের ট্রানজেকশন সিস্টেমের এমন একটি বৈশিষ্ট্য, যা নির্ধারণ করে একাধিক ট্রানজেকশন একসাথে চালানোর সময়, কীভাবে তাদের মধ্যে ডেটার একে অপরের উপর প্রভাব ফেলবে। এটি মূলত ডেটার সঠিকতা এবং ধারাবাহিকতা নিশ্চিত করতে ব্যবহৃত হয়, বিশেষ করে একাধিক ট্রানজেকশন একই সময়ে সম্পাদিত হলে।

ডেটাবেজ সিস্টেমে সাধারণত ৪টি প্রধান ট্রানজেকশন আইসোলেশন লেভেল রয়েছে:


১. READ UNCOMMITTED

এটি সবচেয়ে নিম্ন স্তরের আইসোলেশন লেভেল। এই লেভেলে একটি ট্রানজেকশন অন্য ট্রানজেকশনের অকমিটেড (committed না হওয়া) ডেটা পড়তে পারে, যা "ডার্টি রিড" (dirty read) হিসেবে পরিচিত। এর মানে, একটি ট্রানজেকশন অন্য ট্রানজেকশন দ্বারা পরিবর্তিত হওয়া ডেটা অ্যাক্সেস করতে পারে, যদিও সেই পরিবর্তন শেষ হয়নি বা কমিট হয়নি।

সুবিধা:

  • পারফরম্যান্স বৃদ্ধি: এই লেভেলে সবচেয়ে কম আইসোলেশন, তাই দ্রুত পারফরম্যান্স পাওয়া যায়।

অসুবিধা:

  • ডেটা অসঙ্গতি: এটি ডেটা অসম্পূর্ণ বা ভুল হতে পারে, কারণ অকমিটেড ডেটা পড়া হচ্ছে।

২. READ COMMITTED

এই আইসোলেশন লেভেলে একটি ট্রানজেকশন শুধুমাত্র অন্য ট্রানজেকশনের কমিটেড (committed) ডেটা পড়তে পারে। অর্থাৎ, একটি ট্রানজেকশন সম্পূর্ণভাবে শেষ না হওয়া পর্যন্ত অন্য ট্রানজেকশন তার পরিবর্তিত ডেটা পড়তে পারে না। এটি "ফ্যান্টম রিড" (phantom read) এবং "ডার্টি রিড" (dirty read) থেকে রক্ষা করে।

সুবিধা:

  • ডেটার সঠিকতা: অকমিটেড ডেটা থেকে সুরক্ষা পাওয়া যায়।

অসুবিধা:

  • নম্বর পরিবর্তন হতে পারে: অন্য ট্রানজেকশন চলাকালে নতুন ডেটা ইন্সার্ট বা আপডেট করা হতে পারে, যা ফ্যান্টম রিড তৈরি করতে পারে।

৩. REPEATABLE READ

এই আইসোলেশন লেভেলে একটি ট্রানজেকশন যখন কোনো ডেটা পড়ে, তখন সে ডেটার মান শেষ ট্রানজেকশনের মধ্যে স্থির থাকবে। এতে "ফ্যান্টম রিড" সমস্যা কমে যায়, কিন্তু কিছু ক্ষেত্রে "ফ্যান্টম রেকর্ড" (phantom record) তৈরি হতে পারে।

সুবিধা:

  • স্ট্যাবল ডেটা: যে ডেটা একবার পড়া হয়েছে, তা পরবর্তী সময়ে একই থাকবে।

অসুবিধা:

  • ফ্যান্টম রেকর্ড: নতুন রেকর্ড যুক্ত বা মুছে ফেলা হলে, তা পরবর্তী রিডে দেখানো না হতে পারে।

৪. SERIALIZABLE

এটি সবচেয়ে শক্তিশালী এবং সর্বোচ্চ আইসোলেশন লেভেল। এই লেভেলে, সমস্ত ট্রানজেকশন সম্পূর্ণভাবে একে অপরের থেকে আলাদা এবং একে অপরের উপর কোনো প্রভাব ফেলতে পারে না। অর্থাৎ, একে অপরের সঙ্গে serially (একটির পর একটি) সম্পাদিত হবে। এতে কোনো ধরনের "ডার্টি রিড", "নন-রিপিটেবল রিড", বা "ফ্যান্টম রিড" সমস্যা থাকে না।

সুবিধা:

  • অত্যন্ত সঠিক ডেটা: কোনো ধরনের কনক্যারেন্টি সমস্যা হয় না।

অসুবিধা:

  • পারফরম্যান্স হ্রাস: অধিক আইসোলেশন এবং লকিংয়ের কারণে পারফরম্যান্স কমে যেতে পারে, কারণ একাধিক ট্রানজেকশন একে অপরের জন্য অপেক্ষা করতে পারে।

সারাংশ

  • READ UNCOMMITTED: সবচেয়ে কম আইসোলেশন, দ্রুত পারফরম্যান্স, কিন্তু ডেটা অসঙ্গতির ঝুঁকি।
  • READ COMMITTED: শুধুমাত্র কমিটেড ডেটা পড়া হয়, কম সমস্যা, তবে ফ্যান্টম রিড হতে পারে।
  • REPEATABLE READ: ডেটার সঠিকতা বজায় রাখা হয়, তবে ফ্যান্টম রেকর্ড সমস্যা হতে পারে।
  • SERIALIZABLE: সবচেয়ে শক্তিশালী আইসোলেশন, সর্বোচ্চ ডেটা সঠিকতা, তবে পারফরম্যান্স কমে যেতে পারে।

সিদ্ধান্ত

প্রতিটি আইসোলেশন লেভেলের সুবিধা এবং অসুবিধা আছে। আপনার প্রয়োজনে কোন আইসোলেশন লেভেল ব্যবহার করবেন তা নির্ভর করবে আপনার অ্যাপ্লিকেশন এবং ডেটাবেজের কাজের ধরন ও পারফরম্যান্সের প্রয়োজনের উপর।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion